ドキュメントファイルの表形式のデータをオープンソースツール「docling」でどれくらい読み込めるのか試してみた

ドキュメントファイルの表形式のデータをオープンソースツール「docling」でどれくらい読み込めるのか試してみた

Clock Icon2024.11.18

AWS事業本部コンサルティング部の石川です。先日、文書ファイルの解析と変換に特化した オープンソースツール「docling」 について解説や、様々な日本語ドキュメントを対象に検証しました。本日は、最も質問が多かった「表形式のデータ」を認識できるかを試すため、Markdown形式のドキュメントファイルに変換して結果を確認しました。

https://dev.classmethod.jp/articles/converting-document-files-using-oss-tool-docling/

最新のdoclingにアップデート

2週間前に検証したときのバージョンは2.3.1でしたが、現在はバージョンは2.5.2がリリースされており、積極的に開発が進められていることがわかります。

まずは、最新のdoclingにアップデートにアップデートします。

% pip install --upgrade docling
Requirement already satisfied: docling in /Users/ishikawa.satoru/.pyenv/versions/3.10.11/lib/python3.10/site-packages (2.3.1)
Collecting docling
  Downloading docling-2.5.2-py3-none-any.whl.metadata (6.5 kB)
:
:
:
Downloading docling-2.5.2-py3-none-any.whl (84 kB)
Using cached numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl (14.0 MB)
Installing collected packages: numpy, docling
  Attempting uninstall: numpy
    Found existing installation: numpy 1.26.2
    Uninstalling numpy-1.26.2:
      Successfully uninstalled numpy-1.26.2
  Attempting uninstall: docling
    Found existing installation: docling 2.3.1
    Uninstalling docling-2.3.1:
      Successfully uninstalled docling-2.3.1
Successfully installed docling-2.5.2 numpy-1.26.4

なぜ、Markdown形式に変換するのか

Markdown形式のドキュメントファイルに変換すると目視で確認しやすいこともあります。そして、何よりMarkdown形式に変換したテキストは生成AIが理解しやすいマシンリーダブルなフォーマットであるからです。例えば、以下のプロンプトでMarkdown形式の表を渡して質問をすると適切な回答が得られます。

下記の例では、表に関する質問に対して、行と列を判別して適切なセルの情報に基づき回答を生成しています。

ユーザープロンプトの内容

東京リージョンのm7g.12xlarge.searchのメモリを教えて下さい。

## オンデマンドインスタンスの料金(東京リージョン)

| 汎用 – 現行世代     | vCPU | メモリ (GiB) | インスタンスストレージ (GB) | 1 時間あたりの料金 |
| :------------------ | :--- | :----------- | :-------------------------- | :----------------- |
| t3.small.search     | 2    | 2            | EBS のみ                    | USD 0.056          |
| t3.medium.search    | 2    | 4            | EBS のみ                    | USD 0.112          |
| t2.micro.search     | 1    | 1            | EBS のみ                    | USD 0.028          |
| t2.small.search     | 1    | 2            | EBS のみ                    | USD 0.056          |
| t2.medium.search    | 2    | 4            | EBS のみ                    | USD 0.112          |
| m7g.medium.search   | 1    | 4            | EBS のみ                    | USD 0.087          |
| m7g.large.search    | 2    | 8            | EBS のみ                    | USD 0.175          |
| m7g.xlarge.search   | 4    | 16           | EBS のみ                    | USD 0.35           |
| m7g.2xlarge.search  | 8    | 32           | EBS のみ                    | USD 0.70           |
| m7g.4xlarge.search  | 16   | 64           | EBS のみ                    | USD 1.40           |
| m7g.8xlarge.search  | 32   | 128          | EBS のみ                    | USD 2.799          |
| m7g.12xlarge.search | 48   | 192          | EBS のみ                    | USD 4.199          |
| m7g.16xlarge.search | 64   | 256          | EBS のみ                    | USD 5.599          |
| m7i.large.search    | 2    | 8            | EBS のみ                    | USD 0.208          |
| m7i.xlarge.search   | 4    | 16           | EBS のみ                    | USD 0.417          |
| m7i.2xlarge.search  | 8    | 32           | EBS のみ                    | USD 0.833          |
| m7i.4xlarge.search  | 16   | 64           | EBS のみ                    | USD 1.667          |
| m7i.8xlarge.search  | 32   | 128          | EBS のみ                    | USD 3.333          |
| m7i.12xlarge.search | 48   | 192          | EBS のみ                    | USD 5.00           |
| m7i.16xlarge.search | 64   | 256          | EBS のみ                    | USD 6.666          |
| m6g.large.search    | 2    | 8            | EBS のみ                    | USD 0.164          |
| m6g.xlarge.search   | 4    | 16           | EBS のみ                    | USD 0.329          |
| m6g.2xlarge.search  | 8    | 32           | EBS のみ                    | USD 0.657          |
| m6g.4xlarge.search  | 16   | 64           | EBS のみ                    | USD 1.315          |
| m6g.8xlarge.search  | 32   | 128          | EBS のみ                    | USD 2.629          |
| m6g.12xlarge.search | 48   | 192          | EBS のみ                    | USD 3.944          |
| m5.large.search     | 2    | 8            | EBS のみ                    | USD 0.183          |
| m5.xlarge.search    | 4    | 16           | EBS のみ                    | USD 0.366          |
| m5.2xlarge.search   | 8    | 32           | EBS のみ                    | USD 0.732          |
| m5.4xlarge.search   | 16   | 64           | EBS のみ                    | USD 1.463          |
| m5.12xlarge.search  | 48   | 192          | EBS のみ                    | USD 4.39           |
| m4.large.search     | 2    | 8            | EBS のみ                    | USD 0.195          |
| m4.xlarge.search    | 4    | 16           | EBS のみ                    | USD 0.389          |
| m4.2xlarge.search   | 8    | 32           | EBS のみ                    | USD 0.778          |
| m4.4xlarge.search   | 16   | 64           | EBS のみ                    | USD 1.558          |
| m4.10xlarge.search  | 40   | 160          | EBS のみ                    | USD 3.895          |
| m3.medium.search    | 1    | 3.75         | 1 x 4 SSD                   | USD 0.135          |
| m3.large.search     | 2    | 7.5          | 1 x 32 SSD                  | USD 0.27           |
| m3.xlarge.search    | 4    | 15           | 2 x 40 SSD                  | USD 0.54           |
| m3.2xlarge.search   | 8    | 30           | 2 x 80 SSD                  | USD 1.08           |

Claude 3.5 Sonnet が生成した回答

東京リージョンのm7g.12xlarge.searchインスタンスのメモリは192 GiBです。

この情報は提供いただいた表から直接確認できます。m7g.12xlarge.searchの行を見ると、以下のように記載されています:

| m7g.12xlarge.search | 48   | 192          | EBS のみ                    | USD 4.199          |

ここで、192はメモリ容量を示しており、単位はGiB(ギビバイト)です。

このインスタンスタイプは、大規模なデータ処理や高性能な検索エンジンの運用に適しています。192 GiBという大容量のメモリを活用することで、大量のデータをメモリ上に保持し、高速なデータアクセスや処理が可能になります。

また、このインスタンスは48個のvCPUを持っており、マルチスレッド処理や並列計算にも優れています。ただし、ストレージはEBS(Elastic Block Store)のみとなっているため、必要に応じて別途EBSボリュームをアタッチする必要があります。

ご質問の内容以外にも、このインスタンスタイプに関する詳細情報や、ユースケースについてさらに詳しくお知りになりたい場合は、お気軽にお尋ねください。

表形式のデータを「docling」で検証する

検証用データとして、以下の3種類(3ページ)のWordファイル(.docx)を用意しました。また、Wordファイル(.docx)からPDFファイル(.pdf)を作成して変換します。

  • 例1. セルの結合なし
  • 例2. セルの結合なし(表示はセルの結合に見える)
  • 例3. セルの結合あり

以降の検証では、WordファイルとPDFファイルをそれぞれMarkdownファイルを確認します。

Wordファイル から Markdownファイルに変換

Wordファイル読み込みは、ファイルのフォーマット変換なのであっという間に終わりました。

% docling --to md 表形式の検証用の文章.docx
INFO:docling.document_converter:Going to convert document batch...
INFO:docling.pipeline.base_pipeline:Processing document 表形式の検証用の文章.docx
INFO:docling.document_converter:Finished converting document 表形式の検証用の文章.docx in 0.02 sec.
INFO:docling.cli.main:writing Markdown output to 表形式の検証用の文章.md
INFO:docling.cli.main:Processed 1 docs, of which 0 failed
INFO:docling.cli.main:All documents were converted in 0.02 seconds.

例1. セルの結合なし

このWordファイルは、Markdownファイル変換しやすいように2次元の表形式で、セル結合していません。下の2行はあえて、空白のセルも追加しています。

変換結果は、全く誤認識なく変換できました

converting-tables-using-docling-1

converting-tables-using-docling-7

例2. セルの結合なし(表示はセルの結合に見える)

このWordファイルは、セル結合していませんが罫線を消して、表示はセルが結合しているようにしました。

変換結果は、Markdownファイルの表に「罫線」という概念はなく、全く誤認識なく変換できました。但し、Markdownファイルのレコードを正しく認識できるかは、AIモデル(基盤モデル)に依存します。

converting-tables-using-docling-2

converting-tables-using-docling-8

例3. セルの結合あり

このWordファイルは、「コストタイプ」は縦にセル結合、「1ヶ月あたりのコスト」は横にセル結合しています。

変換結果は、セル結合したセル全てに同じ文字列を追加しています。Markdown形式にセル結合をサポートしていないので、doclingはセル結合を認識上でセル全てに同じ文字列を補完している考えられます。結果として「例1. セルの結合なし」と同じ結果になりました。RAGのデータとしては、中々良い変換結果と言えるでしょう。

converting-tables-using-docling-3

converting-tables-using-docling-9

PDFファイル から Markdownファイル

PDFファイル読み込みは、内部的にレンダリングした後、AIモデルでフォーマット変換するので3ページを7.29秒かかりました。

% docling --to md 表形式の検証用の文章.pdf
INFO:docling.document_converter:Going to convert document batch...
Fetching 9 files: 100%|███████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 74308.54it/s]
INFO:docling.pipeline.base_pipeline:Processing document 表形式の検証用の文章.pdf
INFO:docling.document_converter:Finished converting document 表形式の検証用の文章.pdf in 7.29 sec.
INFO:docling.cli.main:writing Markdown output to 表形式の検証用の文章.md
INFO:docling.cli.main:Processed 1 docs, of which 0 failed
INFO:docling.cli.main:All documents were converted in 7.29 seconds.

例1. セルの結合なし

このWordファイルは、Markdownファイル変換しやすいように2次元の表形式で、セル結合していません。下の2行はあえて、空白のセルも追加しています。

変換結果は、一見誤認識なく変換でき多様に見えましたが、長音(ー)がハイフン(-)に誤認識されています。例えば、本来「データノード」のところを「デ-タノ-ド」と文字起こししています。

converting-tables-using-docling-4

converting-tables-using-docling-10

例2. セルの結合なし(表示はセルの結合に見える)

このWordファイルは、セル結合していませんが罫線を消して、表示はセルが結合しているようにしました。

変換結果は、Markdownファイルの表に「罫線」という概念はなく、概ね誤認識なく変換できましたが、長音(ー)がハイフン(-)に誤認識されています。但し、Markdownファイルのレコードを正しく認識できるかは、AIモデル(基盤モデル)に依存します。

converting-tables-using-docling-5

converting-tables-using-docling-11

例3. セルの結合あり

このWordファイルは、「コストタイプ」は縦にセル結合、「1ヶ月あたりのコスト」は横にセル結合しています。

変換結果は、セル結合したセル全てに同じ文字列を追加しています。縦のセル結合の認識が失敗して、セルに入るべき文字列がズレてしまいましたRAGのデータとして、利用するに値しないデータです。

converting-tables-using-docling-6

converting-tables-using-docling-12

最後に

ドキュメントファイルの表形式のデータをオープンソースツール「docling」でどれくらい読み込めるのか検証しました。doclingは最新のAIモデルを活用し、様々な形式のドキュメントファイルを解析し、Markdown形式やJSON形式に変換する能力を持っています。

日本語のWord文書を用いた検証では、表形式の情報の抽出において概ね良好な結果が得られましたが、複雑なレイアウトを持つ日本語のPDFの変換では、文書構造の再現に課題が残ることも明らかになりました。ページをまたぐ文章の連続性や、数式、画像の扱いについては改善の余地があります。また、日本語特有の問題として、長音符がハイフンに変換されるなどの細かな誤りも見られました。

それでも、doclingは文書管理システム、検索エンジン、データ分析プラットフォーム、AIアプリケーションなど、幅広い用途での活用が期待できるツールです。今後の開発と改善により、日本語文書の処理精度が向上し、より多くのシーンで活用されることが期待されます。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.